Many different types of network elements receive and route IP packets over a network, such as without limitation a server, a router, and a Cable Modem Termination System (CMTS).
A network element may have both an “in-band domain” and an “out-of-band” domain, which are well-understood concepts in the art. An in-band domain refers to network traffic related to the primary purpose of the network element. For example, a router would route Internet traffic over an in-band domain. This is contrasted with an out-of-band domain, which refers to a communication channel used to manage or configure the network element.
Many network elements run the Linux operating system (Linux OS). When a network element runs the Linux OS and comprises both “in-band” and “out-of-band” network domains, the usual industry practice is to perform IP packet routing using a single “global” routing table that includes both in-band domain information and out-of-band domain information.
When a network element transmits an outgoing IP packet, the outgoing IP packet prepared by a software process on the network element is submitted to the Linux OS kernel. The Linux OS kernel selects the outgoing interface usually based on matching the outgoing IP packet's destination IP address with its longest prefix in a default route table.
However, simple destination-based routing will not work for Internet Service Providers (ISPs) that wish to implement separate networks for their in-band and out-of-band traffic. This is so because in-band and out-of-band networks may contain the same or overlapping IP subnets. Another problem preventing ISPs from using simple destination-based routing is that some of the destination IP subnets cannot be known in advance, which is commonly the case when a customer of the ISP wishes to access the Internet. To address these issues, two default routes (and essentially two routing tables) are required to be active on the network element at the same time. Having two routing tables on a network element active at the same time requires a mechanism to effectively select between them.
One approach currently used to select between routing tables on a network element is “policy based routing,” or PBR, which is a routing policy that selects the routing table which should be used based on both the destination and the source IP address of the packet. However, a Linux OS process must use explicit socket “bind( )” calls to use PBR, which is not the case by default, and few Linux OS tools have such customization run-time option. As a result, PBR in many cases prevents the use of third-party binary software packages which use standard socket calls. Even with public domain software, all socket bind( ) calls must be reprogrammed to use policy based routing options, which even if technically feasible, is certainly time-consuming, costly, and labor intensive.